#include <head.h>

/*

判断是否为正常退出 如果时正常退出 返回非0
    WIFEXITED(__stat_loc)
退出的状态值 如果为正常退出 则可以通过下面这个宏进行打印退出状态
    WEXITSTATUS(__stat_loc)
判断是否为信号退出 如果是 则返回 非0 
    WIFSIGNALED(__stat_loc)
信号的值
    WTERMSIG(__stat_loc)

*/

int main(int argc, char const *argv[])
{
    pid_t pid;

    pid = fork();
    if(pid == -1)
    {
        ERRLOG("进程创建失败\n");
    }
    else if(pid > 0)    // 父进程  (((status) & 0xff00) >> 8)
    {
        printf("我是父进程 我的pid = %d\n" , getpid());
        
        // 等待子进程结束
        int __stat_loc;
        pid = wait(&__stat_loc);
        printf("子进程结束 %d" , pid);

        if(WIFEXITED(__stat_loc))
        {
            printf("返回值的为%d\n" , WEXITSTATUS(__stat_loc) );
        }
        if(WIFSIGNALED(__stat_loc))
        {
            printf("信号值的为%d\n" , WTERMSIG(__stat_loc) );
        }
    }
    else if(pid == 0)    // 子进程
    {
        printf("我是子进程 我的pid = %d\n" , getpid());
        printf("我是子进程 我的ppid = %d\n" , getppid());

        sleep(80);
        printf("我是子进程 我结束了 \n");
        exit(10);
        
    }
    
    return 0;
}

